#ifndef IPROJECTMANAGERPLUGIN_H
#define IPROJECTMANAGERPLUGIN_H

#include <string>

#include "../iprojectplugin.h"

class ProjectEventBus;
class ProjectPrivate;
class IProjectManagerPlugin : public IProjectPlugin
{
    public:
        IProjectManagerPlugin() {}
        virtual ~IProjectManagerPlugin() {}
        virtual void Initialize() = 0;

        /// events
        virtual void RegisterEvent( ProjectEventBus* eventBus ) = 0;
        virtual bool HandleEvent( Events::Event* e ) = 0;
        virtual void Release() = 0;

    protected:
        /// import/export project files
        virtual void importProjectFiles( const std::string& inbasefile ) = 0;
        virtual void exportProjectFiles( const std::string& outbasefile ) = 0;

        /// temp function...   ;)
        virtual void printInfo() = 0;
    protected:
        /// NOTE: a fake singleton member, initialize it whenever catch the event signal data
        ProjectPrivate* d;
};

#define DECLARE_PROJECT_MANAGER_PLUGIN_CLASS(ClassName) \
DECLARE_PROJECT_PLUGIN_CLASS(ClassName)

#define INIT_PROJECT_MANAGER_PLUGIN_FACTORY(ClassName) \
INIT_PROJECT_PLUGIN_FACTORY(ClassName)

#define INIT_PROJECT_MANAGER_PLUGIN_NAME(NameStr) \
INIT_PROJECT_PLUGIN_NAME(NameStr)

#define INIT_PROJECT_MANAGER_PLUGIN_VERSION(VersionNum) \
INIT_PROJECT_PLUGIN_VERSION(VersionNum)

#define INIT_PROJECT_MANAGER_PLUGIN_AUTHOR(AuthorStr) \
INIT_PROJECT_PLUGIN_AUTHOR(AuthorStr)

#endif // IPROJECTMANAGERPLUGIN_H
